#include <iostream>
#include <typeinfo>

int main(int argc, const char *argv[])
{
    int vInt = 10;
    int arr[2] = {10, 20};
    int *p = &vInt;
    int **p2p = &p;
    int *parr[2] = {&vInt, &vInt};
    int (*p2arr)[2] = &arr;

    std::cout << "Declaration [int vInt = 10] type==" << typeid(vInt).name() << std::endl;
    std::cout << "Declaration [int arr[2] = {10, 20}] type==" << typeid(arr).name() << std::endl;
    std::cout << "Declaration [int *p = &vInt] type==" << typeid(p).name() << std::endl;
    std::cout << "Declaration [int **p2p = &p] type==" << typeid(p2p).name() << std::endl;
    std::cout << "Declaration [int *parr[2] = {&vInt, &vInt}] type==" << typeid(parr).name() << std::endl;
    std::cout << "Declaration [int (*p2arr)[2] = &arr] type==" << typeid(p2arr).name() << std::endl;
    return 0;
}
